package plp.expressions1.expression;

import plp.expressions1.util.Tipo;
import plp.expressions1.util.TipoPrimitivo;

/**
 * Um objeto desta classe representa uma Expressao de Soma.
 */
public class ExpSoma extends ExpAlgebricaAbstract {

	/**
	 * Controi uma Expressao de Soma com as sub-expressoes especificadas.
	 * Assume-se que estas sub-expressoes resultam em <code>ValorInteiro</code> 
	 * quando avaliadas.
	 * @param esq Expressao da esquerda
	 * @param dir Expressao da direita
	 */
	public ExpSoma(Expressao esq, Expressao dir) {
		super(esq, dir, "+");
	}
	
	/**
	 * Retorna o valor da Expressao de Soma
	 */
	public Valor avaliar() {
		if (getEsq().getTipo().eReal()) {
			return new ValorReal(
					((ValorReal) getEsq().avaliar()).valor() +
					((ValorReal) getDir().avaliar()).valor() );
		}else if(getEsq().getTipo().eInteiro()){
			return new ValorInteiro(
					((ValorInteiro) getEsq().avaliar()).valor() +
					((ValorInteiro) getDir().avaliar()).valor() );
		}
		
		return null;
	}

}
